package com.luxsoft.sw3.services;

import java.util.Date;
import java.util.List;

import com.luxsoft.siipap.model.Sucursal;
import com.luxsoft.siipap.model.User;
import com.luxsoft.siipap.ventas.model.Venta;
import com.luxsoft.siipap.ventas.model.Venta.TipoDeVenta;
import com.luxsoft.sw3.gasoc.model.Factura;
import com.luxsoft.sw3.ventas.Pedido;

/**
 * Manager para la administracion de ventas del Punto de Venta
 * 
 * @author Ruben Cancino
 *
 */
public interface VentasManager {
	
	public static String TIPO_VENTA_GENERAL_DIARIA="VENTA_GENERAL";
	
	/**
	 * Regresa la venta totalemente inicializada
	 * 
	 * @param ventaId
	 * @return
	 */
	public Venta getVenta(final String ventaId);
	
	/**
	 * Cancela la venta
	 * 
	 * @param id
	 * @param fecha
	 * @param usuario
	 * @param motivo
	 * @return
	 */
	public Venta cancelarVenta(final String id,final Date fecha,User usuario,String motivo);
	
	
	/**
	 * Genera la venta a partir de un pedido
	 * 
	 * @param pedido
	 * @return
	 */
	public Venta generarVenta(final Pedido pedido);
	
	/**
	 *  Genera una Factura para la lista de ventas indicada
	 *  
	 * @param ventas
	 * @return
	 */
	public Factura facturar(final List<Venta> ventas);
	
	
	//public Long folioParaFacturaGeneral(TipoDeVenta tipoDeVenta,Sucursal sucursal);
	public Factura facturarVentaGeneral(TipoDeVenta tipoDeVenta,Sucursal sucursal,Date fecha);
	
	/**
	 * Regresa una factura inicializada
	 * 
	 * @param id
	 * @return
	 */
	public Factura getFactura(Long id);
	
}
